home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 July: Mac OS SDK / Dev.CD Jul 96 SDK / Dev.CD Jul 96 SDK1.toast / Development Kits (Disc 1) / AOCE / Development Tools / Sample Code / Standard Catalog Package / DTS AddressOMatic / Src / AddressOMaticPrivate.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-06-17  |  15.1 KB  |  500 lines  |  [TEXT/KAHL]

  1. /*                                AddressOMaticPrivate.h                            */
  2. /*
  3.  * AddressOMatic Sample
  4.  * AddressOMaticPrivate.h
  5.  * Copyright © 1993 Apple Computer Inc. All rights reserved.
  6.  */
  7. #ifndef _AddressOMaticPrivate_
  8. #define _AddressOMaticPrivate_
  9.  
  10. #ifndef REZ                        /* Most of this can't be done by REZ            */
  11. #ifndef _AOM_EXTERN
  12. #define _AOM_EXTERN        extern
  13. #endif
  14. #include "AddressOMatic.h"
  15. #include "LogManager.h"
  16. extern ListHandle    gCurrentLog;
  17. #define LOG(status, msg)    LogStatus(gCurrentLog, (status), (msg))
  18. #define NOTE(msg)            DisplayLogString(gCurrentLog, (msg))
  19. #define NOTE_RString(msg, data) do {                \
  20.         Str255                    __work;                \
  21.         pstrcpy(__work, (msg));                        \
  22.         pstrcat(__work, "\p “");                    \
  23.         pstrcat(__work, OCERToPString((data)));        \
  24.         pstrcat(__work, "\p”");                        \
  25.         DisplayLogString(gCurrentLog, __work);        \
  26.     } while (0)
  27. #define NOTE_Value(msg, value) do {                    \
  28.         Str255                    __work;                \
  29.         Str15                    __valueString;        \
  30.         pstrcpy(__work, (msg));                        \
  31.         pstrcat(__work, "\p = ");                    \
  32.         NumToString((value), __valueString);        \
  33.         pstrcat(__work, __valueString);                \
  34.         DisplayLogString(gCurrentLog, __work);        \
  35.     } while (0)
  36. #ifndef TRUE
  37. #define TRUE                1
  38. #define FALSE                0
  39. #endif
  40. #ifndef NULL
  41. #define NULL                0
  42. #endif
  43.  
  44.  
  45. /*
  46.  * All private functions refer to the AddressOMatic data record using
  47.  * a pointer named aomPtr.
  48.  */
  49. #define AOM            (*aomPtr)                    /* The AOM Data record            */
  50. #define RECT(what)    (AOM.itemRect[(what)])        /* Any item's view                */
  51. #define BOUNDS        RECT(kAOMPanelItem)            /* Boundary of the entire panel    */
  52. #define INTERIOR    RECT(kAOMInteriorAreaItem)    /* Panel without drop shadow    */
  53. #define PANEL        RECT(kAOMSDPPanelItem)        /* The SDP Panels are here        */
  54. #define EXTERIOR    RECT(kAOMSDPPanelExterior)    /* SDP Panel + Find focus rect    */
  55. #define TITLE        RECT(kAOMPanelLabelItem)    /* Panel label                    */
  56. #define FIND        (**AOM.findPanel)            /* The de-referenced Find panel    */
  57. #define FINDING        (FIND.nowFinding != 0)
  58. #define IS_COLOR(port)         (((((CGrafPtr) (port))->portVersion) & 0xC000) != 0)
  59. #define COLOR_DEPTH(port)    ((**((CGrafPtr) port)->portPixMap).pixelSize)
  60. #define DIR_INFO_SIZE (                            \
  61.         GetHandleSize((Handle) AOM.dirInfoHdl)    \
  62.         / sizeof (_AOMDirectoryInfoRecord)        \
  63.     )
  64.  
  65.  
  66. /*
  67.  * The radio buttons are often indexed as: for (i = 0; i < kAOMRadioButtons; i++).
  68.  * The following macro gives the view rect for a radio button given its index.
  69.  */
  70. #define RADIO(i)    RECT((i) + kAOMFirstRadio)
  71.  
  72. /*
  73.  * Test whether a particular mode is selected
  74.  */
  75. #define SELECTED(bit)    (AOM.currentMode == (bit))
  76. #define PD_SELECTED        SELECTED(kAOMEnablePDBit)
  77. #define PANEL_SELECTED    SELECTED(kAOMEnablePanelBit)
  78. #define FIND_SELECTED    SELECTED(kAOMEnableFindBit)
  79. #ifdef ENABLE_TYPEIN
  80. #define TYPEIN_SELECTED    SELECTED(kAOMEnableTypeInBit)
  81. #else
  82. #define TYPEIN_SELECTED    (FALSE)
  83. #endif
  84.  
  85. #define height(r)        ((r).bottom - (r).top)
  86. #define width(r)        ((r).right - (r).left)
  87. #define CLEAR(what) do {                                            \
  88.         register unsigned char    *_ptr = (unsigned char *) &what;    \
  89.         register unsigned long    _size = sizeof what;                \
  90.         while (_size-- > 0)                                            \
  91.             *_ptr++ = 0;                                            \
  92.     } while (0)
  93. /*
  94.  * Definitions (may be made public)
  95.  */
  96. #define kAOMLabelFontNumber        (applFont)
  97. #define kAOMLabelFontSize        (9)
  98. #define kAOMLabelFontHeight        (12)
  99. #define kSpinnerDelay            (6)            /* Ticks between spinner spins        */
  100. #define kWorkBufferSize            (512)        /* For DirEnumerateDirectoriesGet    */
  101. typedef enum {
  102.     kAOMLabelFontStyle    = bold,
  103.     kAOMTextFontStyle = normal
  104. } AOMFontStyle;
  105. /*
  106.  * This is the color palette we use. The colors are taken from the Apple Icon
  107.  * Color 'clut' resource (you can find it in ResEdit), if nowhere else.
  108.  *
  109.  * These values are taken from engineering sources.
  110.  */
  111. #define kAOMBackground            61166
  112. #define kAOMShadow                30583
  113. #define kAOMBevelDark            40859
  114. #define kAOMBevelLight            65535
  115.  
  116. /*
  117.  * kAOMBackgroundColor    The AddressOMatic background.
  118.  * kAOMShadowColor        The fat drop-shadow to the right/bottom of the panel.
  119.  * kAOMDarkBevelColor    A one-pixel shadow to the right/bottom of the panel
  120.  * kAOMLightBevelColor    A one-pixel hilight to the left/top of the panel
  121.  */
  122. #define    kAOMBackgroundColor    { kAOMBackground,    kAOMBackground,    kAOMBackground    }
  123. #define kAOMShadowColor        { kAOMShadow,        kAOMShadow,        kAOMShadow        }
  124. #define kAOMDarkBevelColor    { kAOMBevelDark,    kAOMBevelDark,    kAOMBevelDark    }
  125. #define kAOMLightBevelColor    { kAOMBevelLight,    kAOMBevelLight,    kAOMBevelLight    }
  126. #define kAOMWhiteColor        { 65535,            65535,            65535            }
  127. #define kAOMBlackColor        { 0,                    0,            0                }
  128.  
  129. /*
  130.  * These are the Icon Family resources for the radio buttons.
  131.  */
  132. enum {
  133.     kAOMPDRadioButton            = -16712,        /* AOCE defines these            */
  134.     kAOMPDRadioSelect,
  135.     kAOMPanelRadioButton,
  136.     kAOMPanelRadioSelect,
  137.     kAOMFindRadioButton,
  138.     kAOMFindRadioSelect,
  139.     kAOMTypeInRadioButton,
  140.     kAOMTypeInRadioSelect
  141. };
  142.  
  143. /*
  144.  * Panel layouts
  145.  */
  146. #define kAOMWidthMinimum            (270)        /* Pixels wide, by inspection    */
  147. #define kAOMHeightMinimum            (180)        /* Pixels high, by inspection    */
  148. #define kAOMRadioButtonLeft            (10)        /* Radio button Horizontal        */
  149. #define kAOMRadioButtonTop            (18)        /* First radio button vertical    */
  150. #define kAOMRadioButtonVOffset        (31)        /* Vertical offset betw buttons    */
  151. #define kAOMRadioButtonSize            (25)        /* Radio button height/width    */
  152. /*
  153.  * The panel itself is positioned within the display rectangle. The inset
  154.  * values allow expanding/contracting the panel when the AOM panel changes its
  155.  * size. I.e., if the AOM Panel bottom is 241, SDPPanel Bottom is at 241 - 41.
  156.  */
  157. #define kAOMPanelTopInset            (24)        /* SDP Panel Top                */
  158. #define kAOMPanelLeftInset            (45)        /* SDP Panel Left                */
  159. #define kAOMPanelRightInset            (16)        /* SDP Panel Right                */
  160. #define kAOMPanelBottomInset        (42)        /* SDP Panel Bottom                */
  161.  
  162. #ifdef ENABLE_TYPEIN
  163. /*
  164.  * The type-in panel consists of the text area and a directory popup cdef.
  165.  */
  166. #define kAOMTypeInAddressLabelTop    (kAOMPanelTopInset + 14)
  167. #define kAOMTypeInAddressTop        (kAOMTypeInAddressLabelTop + 18)
  168. #define kAOMTypeInAddressBottom        (kAOMTypeInAddressTop + 50)
  169. #define kAOMTypeInDirectoryLabelTop    (kAOMTypeInAddressBottom + 8)
  170. #define kAOMTypeInPopupTop            (kAOMTypeInDirectoryLabelTop)
  171. #define kAOMTypeInPopupHeight        (18)
  172. #endif
  173.  
  174. /*
  175.  * Position the "active" spinner in the upper-right corner of the panel
  176.  */
  177. #define kAOMSpinnerTopInset        (5)            /* Spinner from top of panel        */
  178. #define kAOMSpinnerRightInset    (24)        /* Spinner from right of panel        */
  179. #define kAOMSpinnerSize            (16)        /* It's a SICN                        */
  180. /*
  181.  * The panel label
  182.  */
  183. #define kAOMPanelLabelTop        (kAOMSpinnerTopInset) /* Label from top            */
  184. #define kAOMPanelLabelHeight    (16)        /* Should use font line height        */
  185.  
  186. /*
  187.  * The big, fat, drop shadow
  188.  */
  189. #define kAOMDropShadowWidth        (4)            /* Shadow height/width/offset        */
  190. /*
  191.  * There are three buttons at the bottom conventionally called "Done," "CC,"
  192.  * and "To." The layout here is reasonable for Roman (left-right) languages,
  193.  * and should be modified for Hebrew/Arabic. For that matter, the whole thing
  194.  * may need adjustment for non-English environments.
  195.  */
  196. #define kAOMButtonBottomInset    (16)        /* Button bottom fm AOM bottom        */
  197. #define kAOMButtonHeight        (16)        /* Button height                    */
  198. #define kAOMDoneButtonLeft        kAOMPanelLeftInset    /* Done left inset            */
  199. #define kAOMDoneButtonWidth        (44)                /* Done button width        */
  200. /*
  201.  * The CC and To buttons are aligned to the right edge of the panel
  202.  */
  203. #define kAOMCCButtonWidth        kAOMDoneButtonWidth    /* CC button width            */
  204. #define kAOMToButtonWidth        kAOMDoneButtonWidth    /* To button width            */
  205. #define kAOMToButtonRightInset    kAOMPanelRightInset    /* To button right edge        */
  206. #define kAOMCCButtonGap            13                    /* Betw. "cc" and "to"        */
  207.  
  208. /*
  209.  * Type-in enumerates all catalogs (directories) and stores the information in
  210.  * a handle-based vector of _AOMDirectoryInfoRecord structures.
  211.  */
  212. typedef struct _AOMDirectoryInfoRecord {
  213. #if 0
  214.     DirectoryName        directoryName;    /* Directory name (RString)                */
  215.     DirDiscriminator    discriminator;    /* Discriminator value                    */
  216.     DirGestalt            features;        /* Directory features                    */
  217. #else
  218.     /*
  219.      * This information is returned by DirGetExtendedDirectoriesInfo.
  220.      */
  221.     PackedRLIPtr        *packedRLIHandle; /* Copy of directory's packed RLI        */
  222.     OSType                entnType;        /* Address type                            */
  223. #endif
  224. } _AOMDirectoryInfoRecord, *_AOMDirectoryInfoPtr, **_AOMDirectoryInfoHdl;
  225.  
  226. /*
  227.  * This is the information we need to draw the radio buttons.
  228.  */
  229. typedef struct AOMRadioButton {
  230.     AOMModeBit            modeBit;        /* Relates button's index to mask bit    */    
  231.     short                normal;            /* Unselected icon family resource id    */
  232.     short                selected;        /* Selected icon family resource id        */
  233. } AOMRadioButton, *AOMRadioButtonPtr;
  234.  
  235. /*
  236.  * Font size, style etc. that are preserved by AOM functions.
  237.  */
  238. typedef struct AOMSaveState {
  239.     GrafPtr            savePort;
  240.     PenState        savePenState;
  241.     short            textFont;
  242.     short            textSize;
  243.     short            textFace;
  244.     RGBColor        foregroundColor;
  245.     RGBColor        backgroundColor;
  246. } AOMSaveState, *AOMSaveStatePtr;
  247.  
  248. enum {
  249.     kButtonDefaultInset        = 4,                /* Default ring inset            */
  250.     kButtonDefaultPenSize    = 3,                /* Default ring size            */
  251.     kActiveControl            = 0,                /* contrlHilite value            */
  252.     kInactiveControl        = 255,                /* contrlHilite value
  253.     kInvisibleCtrl            = 0,                /* contrlVis values (invisible)    */
  254.     kVisibleCtrl            = 0xFF                /* contrlVis (visible)            */
  255. };
  256. #define ControlEnabled(ctrl)    \
  257.     ((ctrl) != NULL && (**ctrl).contrlHilite != kInactiveControl)
  258.  
  259. /*
  260.  * AddressOMatic private functions
  261.  */
  262. void                            _AOMSaveState(
  263.         register AddressOMaticPtr    aomPtr,
  264.         AOMFontStyle                textFace,
  265.         AOMSaveStatePtr                statePtr
  266.     );
  267. void                            _AOMSetFont(
  268.         register AddressOMaticPtr    aomPtr,
  269.         AOMFontStyle                textFace
  270.     );
  271. void                            _AOMRestoreState(
  272.         AOMSaveStatePtr                statePtr
  273.     );
  274. void                            _AOMDecorateDisplay(
  275.         register AddressOMaticPtr    aomPtr
  276.     );
  277. OSErr                            _AOMCreatePanels(
  278.         register AddressOMaticPtr    aomPtr
  279.     );
  280. OSErr                            _AOMCreateButtons(
  281.         register AddressOMaticPtr    aomPtr,
  282.         AOMModeMask                    enableModeMask
  283.     );
  284. void                            _AOMSelectMode(
  285.         AddressOMaticPtr            aomPtr,
  286.         AOMModeBit                    newMode
  287.     );
  288. void                            _AOMPlotIcon(
  289.         register AddressOMaticPtr    aomPtr,
  290.         short                        index,
  291.         Boolean                        isSelected
  292.     );
  293. void                            _AOMDrawDefaultButtonOutline(
  294.         ControlHandle                theControl,
  295.         Boolean                        doDrawButton
  296.     );
  297. GDHandle                        _AOMGetDeviceFromRect(
  298.         const Rect                    *viewRect
  299.     );
  300. void                            _AOMDrawTitleString(
  301.         register AddressOMaticPtr    aomPtr
  302.     );
  303. void                            _AOMSetButtonText(
  304.         register AddressOMaticPtr    aomPtr
  305.     );
  306. void                            _AOMFlashButton(
  307.         register AddressOMaticPtr    aomPtr,
  308.         ControlHandle                theControl
  309.     );
  310. /*
  311.  * Animation
  312.  */
  313. pascal void                        _AOMAnimatePanel(
  314.         SDPPanelHandle                panelHandle,
  315.         Boolean                        busy
  316.     );
  317. pascal void                        _AOMAnimateFindPanel(
  318.         SDPFindPanelHandle            findPanelHandle,
  319.         Boolean                        busy
  320.     );
  321. void                            _AOMUpdateSpinner(
  322.         register AddressOMaticPtr    aomPtr
  323.     );
  324.  
  325. /*
  326.  * SDP Directory Panel Manager (used for the Browser and Personal Directory)
  327.  */
  328. OSErr                            _AOMPanelCreate(
  329.         register AddressOMaticPtr    aomPtr,
  330.         const RStringPtr            *typesList,            /* Types to select        */
  331.         unsigned long                typeCount,            /* Number of types        */
  332.         const PackedRLI                *initialRLI,        /* Initial selection    */
  333.         DirEnumChoices                enumFlags,            /* Enumeration flags    */
  334.         DirMatchWith                matchTypeHow,        /* Enumeration mode        */
  335.         short                        helpResourceID,        /* Help strings            */
  336.         SDPPanelHandle                *panelHandlePtr        /* Result                */
  337.     );
  338. OSErr                            _AOMPanelDispose(
  339.         register AddressOMaticPtr    aomPtr,
  340.         SDPPanelHandle                panelHandle
  341.     );
  342. OSErr                            _AOMPanelShow(
  343.         register AddressOMaticPtr    aomPtr,
  344.         SDPPanelHandle                panelHandle,
  345.         Boolean                        isShow
  346.     );
  347. OSErr                            _AOMPanelEnable(
  348.         register AddressOMaticPtr    aomPtr,
  349.         SDPPanelHandle                panelHandle,
  350.         Boolean                        isEnable
  351.     );
  352. OSErr                            _AOMPanelSetFocus(
  353.         register AddressOMaticPtr    aomPtr,
  354.         SDPPanelHandle                panelHandle,
  355.         Boolean                        hasFocus
  356.     );
  357. OSErr                            _AOMPanelUpdate(
  358.         register AddressOMaticPtr    aomPtr,
  359.         SDPPanelHandle                panelHandle,
  360.         RgnHandle                    drawRgn
  361.     );
  362. OSErr                            _AOMPanelExtractSelection(
  363.         register AddressOMaticPtr    aomPtr,
  364.         SDPPanelHandle                panelHandle,
  365.         unsigned short                *selectionSize,
  366.         PackedDSSpecPtr                *dsSpec
  367.     );
  368. void                            _AOMPanelAdjust(
  369.         register AddressOMaticPtr    aomPtr,
  370.         SDPPanelHandle                panelHandle
  371.     );
  372. OSErr                            _AOMPanelSetIdentity(
  373.         register AddressOMaticPtr    aomPtr,
  374.         SDPPanelHandle                panelHandle,
  375.         AuthIdentity                userIdentity
  376.     );
  377. /*
  378.  * Find panel handler
  379.  */
  380. OSErr                            _AOMFindCreate(
  381.         register AddressOMaticPtr    aomPtr,
  382.         const RStringPtr            *typesList,            /* Types to select        */
  383.         unsigned long                typeCount,            /* Number of types        */
  384.         short                        simultaneousSearchCount,
  385.         SDPFindPanelFocus            initialFocus,
  386.         DirMatchWith                matchTypeHow,        /* Enumeration mode        */
  387.         short                        helpResourceID        /* Help strings            */
  388.     );
  389. OSErr                            _AOMFindDispose(
  390.         register AddressOMaticPtr    aomPtr
  391.     );
  392. OSErr                            _AOMFindShow(
  393.         register AddressOMaticPtr    aomPtr,
  394.         Boolean                        isShow
  395.     );
  396. OSErr                            _AOMFindEnable(
  397.         register AddressOMaticPtr    aomPtr,
  398.         Boolean                        isEnable
  399.     );
  400. OSErr                            _AOMFindSetFocus(
  401.         register AddressOMaticPtr    aomPtr,
  402.         SDPFindPanelFocus            newFocus
  403.     );
  404. OSErr                            _AOMFindUpdate(
  405.         register AddressOMaticPtr    aomPtr,
  406.         RgnHandle                    drawRgn
  407.     );
  408. OSErr                            _AOMFindExtractSelection(
  409.         register AddressOMaticPtr    aomPtr,
  410.         unsigned short                *selectionSize,
  411.         PackedDSSpecPtr                *dsSpec
  412.     );
  413. OSErr                            _AOMFindStartStop(
  414.         register AddressOMaticPtr    aomPtr,
  415.         Boolean                        startFind
  416.     );
  417. void                            _AOMFindAdjust(
  418.         register AddressOMaticPtr    aomPtr
  419.     );
  420. OSErr                            _AOMFindSetIdentity(
  421.         register AddressOMaticPtr    aomPtr,
  422.         AuthIdentity                userIdentity
  423.     );
  424. /*
  425.  * Type-in handlers
  426.  */
  427. #ifdef ENABLE_TYPEIN
  428. OSErr                            _AOMTypeInCreate(
  429.         register AddressOMaticPtr    aomPtr
  430.     );
  431. OSErr                            _AOMTypeInDispose(
  432.         register AddressOMaticPtr    aomPtr
  433.     );
  434. OSErr                            _AOMTypeInEvent(
  435.         register AddressOMaticPtr    aomPtr,
  436.         const EventRecord            *theEvent,
  437.         register AOMPanelState        *whatHappened
  438.     );
  439. OSErr                            _AOMTypeInShow(
  440.         register AddressOMaticPtr    aomPtr,
  441.         Boolean                        isShow
  442.     );
  443. OSErr                            _AOMTypeInUpdate(
  444.         register AddressOMaticPtr    aomPtr,
  445.         RgnHandle                    drawRgn
  446.     );
  447. OSErr                            _AOMTypeInExtractSelection(
  448.         register AddressOMaticPtr    aomPtr,
  449.         unsigned short                *selectionSize,
  450.         PackedDSSpecPtr                *dsSpec
  451.     );
  452. void                            _AOMTypeInAdjust(
  453.         register AddressOMaticPtr    aomPtr
  454.     );
  455. #endif
  456. /*
  457.  * Cheap 'n dirty pascal string copy routine.
  458.  */
  459. #ifndef pstrcpy
  460. #define pstrcpy(dst, src) do {                            \
  461.         StringPtr    _src = (src);                        \
  462.         BlockMove(_src, dst, _src[0] + 1);                \
  463.     } while (0)
  464. #endif
  465. /*
  466.  * Cheap 'n dirty pascal string concat.
  467.  */
  468. #ifndef pstrcat
  469. #define pstrcat(dst, src) do {                            \
  470.         StringPtr        _dst = (dst);                    \
  471.         StringPtr        _src = (src);                    \
  472.         short            _len;                            \
  473.         _len = 255 - _dst[0];                            \
  474.         if (_len > _src[0]) _len = _src[0];                \
  475.         BlockMove(&_src[1], &_dst[1] + _dst[0], _len);    \
  476.         _dst[0] += _len;                                \
  477.     } while (0)
  478. #endif
  479.  
  480. #define width(r)    ((r).right - (r).left)
  481. #define height(r)    ((r).bottom - (r).top)
  482.  
  483. /*
  484.  * AddressOMatic private globals.
  485.  */
  486. _AOM_EXTERN    CCTabHandle        _AOMccTabHandle;    /* Private control color table        */
  487. extern const AOMRadioButton    _AOMRadioInfo[kAOMRadioButtons];
  488. extern const RGBColor        _AOMBackgroundColor;
  489. extern const RGBColor        _AOMShadowColor;
  490. extern const RGBColor        _AOMDarkBevelColor;
  491. extern const RGBColor        _AOMLightBevelColor;
  492. extern const RGBColor        _AOMDisabledTextColor;
  493. extern const RGBColor        _AOMDisabledRingColor;
  494. extern const RGBColor        _AOMWhiteColor;
  495. extern const RGBColor        _AOMBlackColor;
  496.  
  497. #endif    /* Not REZ            */
  498. #endif    /* _AddressOMatic_ */
  499.  
  500.